home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / prog / prio / prio_test.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  3.5 KB  |  155 lines

  1. #include <LEDA/prio.h>
  2.  
  3. #include <LEDA/impl/m_heap.h>
  4. #include <LEDA/impl/k_heap.h>
  5. #include <LEDA/impl/p_heap.h>
  6. #include <LEDA/impl/list_pq.h>
  7.  
  8. typedef float FLOAT;
  9.  
  10.  
  11. #if !defined(__TEMPLATE_ARGS_AS_BASE__)
  12. declare3(_priority_queue,int,int,m_heap)
  13. declare3(_priority_queue,int,int,k_heap)
  14. declare3(_priority_queue,int,int,p_heap)
  15. declare3(_priority_queue,int,int,list_pq)
  16.  
  17. declare3(_priority_queue,FLOAT,FLOAT,m_heap)
  18. declare3(_priority_queue,FLOAT,FLOAT,k_heap)
  19. declare3(_priority_queue,FLOAT,FLOAT,p_heap)
  20. declare3(_priority_queue,FLOAT,FLOAT,list_pq)
  21. #endif
  22.  
  23. void prio_test(priority_queue<int,int>& D, int N, int* A, char* name)
  24.   pq_item* I = new pq_item[N];
  25.  
  26.   cout << string("%-12s",name);
  27.   cout.flush();
  28.  
  29.   float T;
  30.   float T0 = T = used_time();
  31.  
  32.   for(int i=0; i<N; i++)  I[i] = D.insert(i,A[i]);
  33.   cout << string("%10.2f",used_time(T));
  34.   cout.flush();
  35.  
  36.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  37.   cout << string("%14.2f",used_time(T));
  38.   cout.flush();
  39.  
  40.   int old_min = -MAXINT;
  41.  
  42.   for(i=0; i<N; i++)  
  43.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_min\n";
  44.     old_min = D.inf(D.find_min()); 
  45.     D.del_min();
  46.    }
  47.  
  48.   cout << string("%10.2f",used_time(T));
  49.  
  50.   cout << string("%10.2f",used_time(T0));
  51.  
  52.   if (!D.empty()) cout << " NOT EMPTY !!\n";    
  53.  
  54.   newline;
  55.  
  56.   delete I;
  57. }
  58.  
  59.  
  60. void prio_test(priority_queue<FLOAT,FLOAT>& D, int N, FLOAT* A, char* name)
  61.   pq_item* I = new pq_item[N];
  62.  
  63.   cout << string("%-12s",name);
  64.   cout.flush();
  65.  
  66.   float T;
  67.   float T0 = T = used_time();
  68.  
  69.  
  70.   for(int i=0; i<N; i++)  I[i] = D.insert(i,A[i]);
  71.   cout << string("%10.2f",used_time(T));
  72.   cout.flush();
  73.  
  74.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  75.   cout << string("%14.2f",used_time(T));
  76.   cout.flush();
  77.  
  78.   FLOAT old_min = -MAXINT;
  79.  
  80.   for(i=0; i<N; i++)  
  81.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_min\n";
  82.     old_min = D.inf(D.find_min());
  83.     D.del_min();
  84.    }
  85.  
  86.   cout << string("%10.2f",used_time(T));
  87.  
  88.   cout << string("%10.2f",used_time(T0));
  89.  
  90.   if (!D.empty()) cout << " NOT EMPTY !!\n";    
  91.  
  92.   newline;
  93.  
  94.   delete I;
  95. }
  96.  
  97.  
  98.  
  99. main()
  100. { priority_queue<int,int>            Q;
  101.   priority_queue<FLOAT,FLOAT>        Qf;
  102.  
  103.   int    N     = read_int("# keys = ");
  104.   int*   Int   = new int[N];
  105.   FLOAT* Float = new FLOAT[N];
  106.  
  107.   for(int i=0; i<N; i++) Float[i] = Int[i] = random(0,200000);//-100000;
  108.  
  109. #if defined(__TEMPLATE_ARGS_AS_BASE__)
  110.   _priority_queue<int,int,m_heap>    m_q(N);
  111.   _priority_queue<int,int,k_heap>    k_q(N);
  112.   _priority_queue<int,int,p_heap>    p_q;
  113.   _priority_queue<int,int,list_pq>   l_q;
  114.  
  115.   _priority_queue<FLOAT,FLOAT,m_heap>    m_qf(N);
  116.   _priority_queue<FLOAT,FLOAT,k_heap>    k_qf(N);
  117.   _priority_queue<FLOAT,FLOAT,p_heap>    p_qf;
  118.   _priority_queue<FLOAT,FLOAT,list_pq>   l_qf;
  119. #else
  120.   _priority_queue(int,int,m_heap)    m_q(N);
  121.   _priority_queue(int,int,k_heap)    k_q(N);
  122.   _priority_queue(int,int,p_heap)    p_q;
  123.   _priority_queue(int,int,list_pq)   l_q;
  124.  
  125.   _priority_queue(FLOAT,FLOAT,m_heap)    m_qf(N);
  126.   _priority_queue(FLOAT,FLOAT,k_heap)    k_qf(N);
  127.   _priority_queue(FLOAT,FLOAT,p_heap)    p_qf;
  128.   _priority_queue(FLOAT,FLOAT,list_pq)   l_qf;
  129. #endif
  130.  
  131.  
  132.   newline;
  133.   cout << "                insert   decrease_inf  del_min    total\n";
  134.   newline;
  135.  
  136.   prio_test(Q,N,Int,"prio");
  137.   //prio_test(m_q,N,Int,"m_heap");
  138.   prio_test(k_q,N,Int,"k_heap");
  139.   prio_test(p_q,N,Int,"p_heap");
  140.   //prio_test(l_q,N,Int,"list_pq");
  141.   newline;
  142.  
  143.  
  144.   prio_test(Qf,N,Float,"prio");
  145.   //prio_test(m_qf,N,Float,"m_heap");
  146.   prio_test(k_qf,N,Float,"k_heap");
  147.   prio_test(p_qf,N,Float,"p_heap");
  148.   //prio_test(l_qf,N,Float,"list_pq");
  149.   newline;
  150.  
  151.   return 0;
  152. }
  153.